package com.yjy.mybase.utils;

import android.content.Context;
import android.content.Intent;

/**
 * author : YangJinyang
 * create : 2019-10-29 15:04
 * description : 程序异常处理类
 */
public class CrashHandler implements Thread.UncaughtExceptionHandler {


    public static final String TAG = "CrashHandler";


// 系统默认的UncaughtException处理类

    private Thread.UncaughtExceptionHandler mDefaultHandler;

// CrashHandler实例

    private static CrashHandler INSTANCE = new CrashHandler();

// 程序的Context对象

    private Context mContext;


    /**
     * 保证只有一个CrashHandler实例
     */

    private CrashHandler() {

    }


    /**
     * 获取CrashHandler实例 ,单例模式
     */

    public static CrashHandler getInstance() {

        if (INSTANCE == null) {

            INSTANCE = new CrashHandler();

        }

        return INSTANCE;

    }


    /**
     * 初始化,注册Context对象,
     * 获取系统默认的UncaughtException处理器,
     * 设置该CrashHandler为程序的默认处理器
     *
     * @param context
     */

    public void init(Context context) {

        mContext = context;

// 获取系统默认的UncaughtException处理器

        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();

// 设置该CrashHandler为程序的默认处理器

        Thread.setDefaultUncaughtExceptionHandler(this);

    }


    /**
     * 当UncaughtException发生时会转入该函数来处理
     */

    @Override

    public void uncaughtException(Thread thread, Throwable ex) {

        Intent intent = new Intent(mContext, ExceptionActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(intent);
        System.exit(1);//关闭已奔溃的app进程
    }


}
